<?php

/*
 * This file is part of the symfony package.
 * (c) 2004-2006 Fabien Potencier <fabien.potencier@symfony-project.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

/**
 *
 * @package    symfony
 * @subpackage plugin
 * @author     Fabien Potencier <fabien.potencier@symfony-project.com>
 * @version    SVN: $Id: BasesfGuardAuthActions.class.php 12075 2008-10-08 16:15:03Z noel $
 */
class BasesfGuardAuthActions extends sfActions {
    public function executeSignin($request) {
	$user = $this->getUser();
	if ($user->isAuthenticated()) {
	    return $this->redirect('@homepage');
    }

	$class = sfConfig::get('app_sf_guard_plugin_signin_form', 'sfGuardFormSignin');
	$this->form = new $class();

	if ($request->isMethod('post')) {
	    $this->form->bind($request->getParameter('signin'));
	    if ($this->form->isValid()) {
		$values = $this->form->getValues();
		$this->getUser()->signin($values['user'], array_key_exists('remember', $values) ? $values['remember'] : false);

		// always redirect to a URL set in app.yml
		// or to the referer
		// or to the homepage
		$signinUrl = sfConfig::get('app_sf_guard_plugin_success_signin_url', $user->getReferer('@homepage'));

		return $this->redirect($signinUrl);
	    }
	}
	else {
	    if ($request->isXmlHttpRequest()) {
		$this->getResponse()->setHeaderOnly(true);
		$this->getResponse()->setStatusCode(401);

		return sfView::NONE;
	    }

	    // if we have been forwarded, then the referer is the current URL
	    // if not, this is the referer of the current request
	    $user->setReferer($this->getContext()->getActionStack()->getSize() > 1 ? $request->getUri() : $request->getReferer());

	    $module = sfConfig::get('sf_login_module');
	    if ($this->getModuleName() != $module) {
		return $this->redirect($module.'/'.sfConfig::get('sf_login_action'));
	    }

	    $this->getResponse()->setStatusCode(401);
	}
    }

    public function executeSignout($request) {
	$this->getUser()->signOut();

	$signoutUrl = sfConfig::get('app_sf_guard_plugin_success_signout_url', $request->getReferer());

	$this->redirect('' != $signoutUrl ? $signoutUrl : '@homepage');
    }

    public function executeSecure() {
	$this->setLayout(false);
	$this->getResponse()->setStatusCode(403);
    }

    public function executePassword($request) {
	$user = $this->getUser()->getGuardUser();
	if (! $this->getUser()->isAuthenticated()) {
	    return $this->redirect('@homepage');
	}


	$class = sfConfig::get('app_sf_guard_plugin_password_form', 'sfGuardFormPassword');
	$this->form = new $class();

	if ($request->isMethod('post')) {
	    $this->form->bind($request->getParameter('password'));
	    if ($this->form->isValid()) {
		$values = $this->form->getValues();
		$this->getUser()->setPassword($values['nouveau password']);
		// always redirect to a URL set in app.yml
		// or to the referer
		// or to the homepage
		$signinUrl = sfConfig::get('app_sf_guard_plugin_success_password_url', $this->getUser()->getReferer('@homepage'));
		$this->change = true;
	    //		return $this->redirect($signinUrl);
	    }
	}

    }
}
